Step Functionsをcronで定期的に実行する【CloudWatch Events】
こんにちは、臼田です。
皆さんLambdaしていますか?
今Step FunctionsとLambdaでURLの更新チェックを行う仕組みを作っていますが、デイリーで実行するためにCloudWatch Eventsからcronで実行する設定を行います。
Step Functionsの作成過程は下記をご参照下さい。
ちなみに、Step Functionsリリース当初ではCloudWatch Eventsから呼び出せないのでLambdaから実行していたようです。
AWS Step Functionsを定期的に実行するLambda関数をServerless Frameworkでデプロイする #reinvent
設定してみた
あっさり終わります。設定時間は3分かからないくらいです。
CloudWatchを開いて、「ルール」から「ルールの作成」を選択します。
イベントソースで「スケジュール」「Cron式」を選択します。
Cron式には「0 0 * * ? *」と入れましたが、これは日本時間AM09:00で毎日実行する設定です。
CloudWatch EventsでのCron式は「分 時間 日 月 曜日 年」の並びで設定するので、大体曜日は「?」になります。
デイリーでの実行なので、分と時間だけ値を入れます。
GMTでの設定になるので、日本時間AM08:00なら「0 23 * * ? *」、AM00:00なら「0 15 * * ? *」になります。
cronの参考など詳しくはこちらを参照してください。
ターゲットでは「ターゲットの追加」を押した後「Step Functions ステートマシン」を選択し、作成したStep Functionsのステートマシン名を選択し、「設定の詳細」を押します。
ロールはデフォルトで作成してくれるのでそのままで問題ありません。
「名前」を入力して「ルールの作成」を押します。
作成が完了しました。
実行後はStep Functionsの画面で下記のように実行されていることが確認できます。
入力sourceが「aws.events」となっています。※実行時間は都合上上記の設定とは異なります
さいごに
CloudWatch Eventsを利用すれば、簡単にStep Functionsの定期実行が実装できました。
cronで直接Lambdaを実行してもいいですが、フローが別れたりするものはマイクロサービスとして分割して、Step Functionsで管理するのもいいですよね。